iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
自我挑戰組

Asp.Net Core 從 Post FormData 走到 輕前端 Vue系列 第 22

Day22 - Ajax 加上 Antiforgery Token (二)

  • 分享至 

  • xImage
  •  

Case01

與 Day21 重點差異的部份:

  • Controller 內 Action:

    加上 ValidateAntiForgeryToken Attribute

    // ...
    
    [HttpPost, Route("api/[controller]/[action]")]
    [ValidateAntiForgeryToken]
    public IActionResult PostCase01([FromBody]ViewModel vm)
    {
        return Ok(vm);
    }
    
    // ...
    
  • View :

    • 新增 Partial View _Antiforgery.cshtml

      @inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
      @functions{
          private string GetAntiXsrfRequestToken()
          {
              return Xsrf.GetAndStoreTokens(Context).RequestToken;
          }
      }
      
      <script>
          window.Antiforgery = {};
          Antiforgery.RequestVerificationToken = '@(GetAntiXsrfRequestToken())';
      </script>
      
    • Case01

      View 加上引用上述的 Partial View

      ...
      
      @section Scripts
      {
          <partial name="_Antiforgery"/>
          <script>
          const app = createApp({
              setup(){
      
      ...
      

      fetch 加上 Header RequestVerificationToken

      // ...
          fetch(post_url, {
              method: 'POST',
              headers: {
                  'Content-Type': 'application/json',
                  'RequestVerificationToken' : Antiforgery.RequestVerificationToken
              },
              body: JSON.stringify(vue_model),
          })
      
      // ...
      

參考資料:Prevent Cross-Site Request Forgery (XSRF/CSRF) attacks in ASP.NET Core

下一篇來看看把 Day17 範例改用 輕前端 Vue !


上一篇
Day21 - 輕前端 Vue - 動態 新增/刪除 Collection 項目(四)
下一篇
Day23 - Day17 改為輕前端範例
系列文
Asp.Net Core 從 Post FormData 走到 輕前端 Vue30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言